
#include "nane/core/crt/FileSystem.h"
#include "nane/core/ISubSystem.h"
#include "nane/core/assert.h"

namespace nane
{
    ////////////////////////////////////////////////////////////////////////////////////////////////
    template<>
    IFileSystem* Holder<IFileSystem>::s_instance = NULL;
    ////////////////////////////////////////////////////////////////////////////////////////////////
//    bool FileSystem::initialize()
//    {
//        NANE_ASSERT( m_context->fileSystem == NULL, "FileSystem already initialized" );
//        createSubSystem( &m_context->fileSystem );
//        return m_context->fileSystem != NULL;
//    }
//    ////////////////////////////////////////////////////////////////////////////////////////////////
//    void FileSystem::shutdown()
//    {
//        releaseSubSystem( m_context->fileSystem );
//        m_context->fileSystem = NULL;
//    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
//    void FileSystem::collapsePath( const std::string& _path, std::string* _collapsedPath )
//    {
//        assert( _collapsedPath != NULL );
//        // Don't ignore empty: we do want to keep trailing slashes.
//        TStringVector as;
//
//        String::split( _path, "/", &as );
//
//        // pass to remove duplicate '/' ( .//foo, ..//foo )
//        for( TStringVector::size_type i = 0; i < as.size(); /**/ )
//        {
//            if( as[i].empty() == true && i > 0 && ( as[i-1] == ".." || as[i-1] == "." ) )
//            {
//                as.erase( as.begin() + i );
//            }
//            else
//            {
//                ++i;
//            }
//        }
//
//        for( TStringVector::size_type i = 0; i < as.size(); ++i )
//        {
//            if( as[i] == ".." && i != 0 )
//            {
//                /* If the previous element is also "..", then we have a path beginning
//                * with multiple "../"--one .. can't eat another .., since that would
//                * cause "../../foo" to become "foo". */
//                if( as[i-1] != ".." )
//                {
//                        as.erase( as.begin()+i-1 );
//                        as.erase( as.begin()+i-1 );
//                        i -= 2;
//                }
//            }
//            else if( as[i] == "" && i != 0 && i != 1 && i+1 < as.size() )
//            {
//                /* Remove empty parts that aren't at the beginning or end;
//                * "foo//bar/" -> "foo/bar/", but "/foo" -> "/foo" and "foo/"
//                * to "foo/". */
//                as.erase( as.begin()+i );
//                i -= 1;
//            }
//            else if( as[i] == "." )
//            {
//                as.erase( as.begin()+i );
//                i -= 1;
//            }
//        }
//        String::join( as, "/", _collapsedPath );

//    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
}   // namespace nane
